package com.liuxinlong.modules.dao;

import com.liuxinlong.modules.entity.User;
import com.liuxinlong.modules.system.dto.ExportUserDto;
import com.baomidou.mybatisplus.service.IService;

import java.util.List;
import java.util.Map;

/**
 * 用户信息dao接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2022-01-10
 */
public interface UserDao extends IService<User> {
    /**
     * 查询用户列表
     *
     * @param queryParam 查询参数
     * @return 用户列表
     */
    List<User> pageUserList(Map<String, Object> queryParam);

    /**
     * 统计查询用户数量
     *
     * @param queryParam 查询参数
     * @return 用户数量
     */
    int getUserCount(Map<String, Object> queryParam);

    /**
     * 根据用户账号查询用户信息
     *
     * @param account 用户账号
     * @return 用户信息
     */
    User getUserByAccount(String account);

    /**
     * 修改用户在线状态
     *
     * @param userId        用户id
     * @param targetStatus  当前状态
     * @param lastLoginTime 最后登陆时间
     */
    void updateUserStatus(String userId, int targetStatus, String lastLoginTime);

    /**
     * 查询用户信息map
     * id: userInfo
     *
     * @return 用户信息map
     */
    Map<String, Map<String, String>> getUserMap();

    /**
     * 查询用户信息(含头像)map
     * id: userInfo
     *
     * @return 用户信息(含头像)map
     */
    Map<String, Map<String, String>> getUserPictureMap();

    /**
     * 查询全部用户信息
     *
     * @return 用户信息列表
     */
    List<User> getUserList();

    /**
     * 查询全部用户信息
     *
     * @return 用户信息列表
     */
    List<ExportUserDto> getAllUserList();

    /**
     * 用户密码修改
     *
     * @param userId   用户id
     * @param password 新密码
     */
    void updatePassword(String userId, String password);

    /**
     * 用户拓展信息修改
     *
     * @param user 用户信息
     */
    void updateUserExp(User user);

    /**
     * 查询用户信息map
     * sn:userInfo
     *
     * @return 用户信息map
     */
    Map<String, Map<String, String>> getUserMapBySn();

    /**
     * 获取在线用户列表
     *
     * @return 在线用户列表
     */
    List<User> getOnlineUserList();

    /**
     * 根据用户工号获取用户信息
     *
     * @param sn 工号
     * @return 用户信息
     */
    User getUserBySn(String sn);

    /**
     * 根据部门获取用户信息
     *
     * @param depList 部门列表
     * @return 用户信息列表
     */
    List<String> getUserByDeps(List<String> depList);

    /**
     * 查询用户企业微信信息map
     *
     * @return 用户企业微信信息map
     */
    Map<String, Map<String, String>> getUserWechatMap();

    /**
     * 查询用户企业微信id信息map
     *
     * @return 用户企业微信id信息map
     */
    Map<String, Map<String, String>> getWechatUserMap();

    /**
     * 根据名称获取用户列表
     *
     * @param userName 用户名
     * @return 用户列表
     */
    List<User> getUserListByName(String userName);

    /**
     * 获取全部用户基本信息
     *
     * @return 全部用户基本信息
     */
    List<User> getUserBaseList();
}
